{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Calculates the Percentage of Area Lost to Solar, Both in the Present and in Future Scenarios"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This workbook takes in data that requires several processing steps before it can be used in this notebook.\n",
    "1. The CDL layer reclassified to match the values downloaded from the NASS dataset is clipped to the extent of the solar site polygons \n",
    "2. The crop area totals for each county (or State) are calculated with the Land_Cover_Breakdown notebook using the raster fragments created in the previous step as the raster input\n",
    "3. The result should be a polygon with the sum of each commodity area appended to each polygon\n",
    "This workbook takes in the polygon shapefile with the crop areas appended to it, and a directory containing NASS crop areas for the state of NY and performs the following analysis:\n",
    "1. Total harvested area is calculated by summing the various size bracket areas and then converted from acres to ha\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\Users\\twk54\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\pyogrio\\raw.py:196: RuntimeWarning: Non-conformant content for record 1 in column DATEMOD, 2022-07-29T00:00:00.0Z, successfully parsed\n",
      "  return ogr_read(\n"
     ]
    }
   ],
   "source": [
    "import rasterio\n",
    "import geopandas as gpd\n",
    "import pandas as pd\n",
    "from rasterstats import zonal_stats\n",
    "import rasterio\n",
    "import numpy as np\n",
    "import rasterio.features\n",
    "from shapely.geometry import shape\n",
    "import os\n",
    "from rasterio.features import geometry_mask\n",
    "from shapely.geometry import mapping\n",
    "from rasterio.mask import geometry_mask\n",
    "from shapely.geometry import mapping\n",
    "import os\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "root_dir = r\"C:\\Users\\twk54\\Documents\\Publications\\Repository\"\n",
    "x_dim, y_dim = 6,5\n",
    "\n",
    "land_cover_remap_table = f'{root_dir}/Data/Tables/Crop_Land.csv'\n",
    "coa_areas = f'{root_dir}/Data/Tables/COA_Areas' #Land area values downloaded from the census of ag (COA)\n",
    "\n",
    "#Inputs \n",
    "state_outline = \"StateShoreline\" # Shapefile that represents the zones for which the area will be tabulated\n",
    "gpk_path = fr\"{root_dir}\\Data\\INFEWS_Solar.gpkg\"\n",
    "state_gdf = gpd.read_file(gpk_path, layer = state_outline)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Remap Raw Cover Class Raster to Crop Types"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   New Classes  New ID\n",
      "0     Not Crop       1\n",
      "1         CORN       2\n",
      "2          SOY       3\n",
      "3      ALFALFA       4\n",
      "4          HAY       5\n",
      "5        WHEAT       6\n",
      "6         OATS       7\n",
      "7        BEANS       8\n",
      "8       BARLEY       9\n",
      "9        OTHER      11\n",
      "10       GRASS      12\n",
      "11         RYE      13\n"
     ]
    }
   ],
   "source": [
    "year = 2008 # can only be 2008 or 2023 unless additional CDLs are added\n",
    "\n",
    "raster_path = f\"{root_dir}/Data/Rasters/Raw/NYS_{year}_CDL_30m.tif\"\n",
    "df = pd.read_csv(land_cover_remap_table)\n",
    "def create_mapping(df):\n",
    "    \n",
    "    mapping = pd.Series(df['Remap'].values, index=df['Value']).to_dict()\n",
    "    return mapping\n",
    "def remap_raster(raster_path, output_raster_path, mapping, default_value=0):\n",
    "    with rasterio.open(raster_path) as src:\n",
    "        band1 = src.read(1)\n",
    "        \n",
    "        # Determine the smallest data type that can accommodate the range of values\n",
    "        dtype = 'uint8' if max(mapping.values()) <= 255 else 'int16'\n",
    "        \n",
    "        # Prepare the output array with a default value\n",
    "        remapped_array = np.full(band1.shape, default_value, dtype=dtype)\n",
    "        \n",
    "        # Apply the mapping\n",
    "        for orig_value, new_value in mapping.items():\n",
    "            if pd.notna(new_value):  # Only apply mapping if new_value is not NaN\n",
    "                remapped_array[band1 == orig_value] = int(new_value)\n",
    "            else:\n",
    "                print(f\"Warning: No mapping for value {orig_value}, using default {default_value}\")\n",
    "\n",
    "        # Copy the metadata to write the new raster\n",
    "        out_meta = src.meta.copy()\n",
    "        out_meta.update({\n",
    "            'dtype': dtype,  # Pass the string representation directly\n",
    "            'nodata': default_value,\n",
    "            'compress': 'lzw'  # Use LZW compression\n",
    "        })\n",
    "\n",
    "        # Write the new raster using the new values\n",
    "        with rasterio.open(output_raster_path, \"w\", **out_meta) as dest:\n",
    "            dest.write(remapped_array, 1)\n",
    "\n",
    "# Create the value mapping\n",
    "value_mapping = create_mapping(df)\n",
    "reclassified_raster_path = fr\"{root_dir}/Data/Rasters/Reclassified/Cropland{year}.tif\" \n",
    "# Remap the raster values, specify a default value if necessary\n",
    "remap_raster(raster_path, reclassified_raster_path, value_mapping, default_value=-0)\n",
    "cover_df = df[['New Classes', 'NewID']].copy().reset_index(drop=True)\n",
    "# If there are rows where 'New Classes' is 'NA' or 'NewID' is missing, you might want to drop them\n",
    "cover_df.dropna(subset=['New Classes', 'NewID'], inplace=True)\n",
    "cover_df['New ID'] = cover_df['NewID'].astype(int)\n",
    "cover_df = cover_df.drop('NewID', axis=1)\n",
    "print(cover_df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Tabulate Crop Areas Within Existing Polygons"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Zonal statistics added, converted to hectares, and columns renamed based on class names.\n",
      "Crop areas in hectares:\n",
      "{'HAY': 827.1, 'OATS': 10.17, 'SOY': 172.07999999999998, 'WHEAT': 56.79, 'ALFALFA': 333.27, 'BARLEY': 0.63, 'CORN': 603.4499999999999, 'RYE': 3.69, 'OTHER': 66.96}\n",
      "Percentage of total area used by each crop:\" {'HAY': '0.31%', 'OATS': '0.05%', 'SOY': '0.12%', 'WHEAT': '0.13%', 'ALFALFA': '0.25%', 'BARLEY': '0.02%', 'CORN': '0.12%', 'RYE': '0.06%', 'OTHER': '0.0%'}\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Scenario</th>\n",
       "      <th>Crop</th>\n",
       "      <th>Total Land (ha)</th>\n",
       "      <th>Land Used (Ha)</th>\n",
       "      <th>Percentage</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Existing Sites</td>\n",
       "      <td>HAY</td>\n",
       "      <td>266480.87</td>\n",
       "      <td>827.10</td>\n",
       "      <td>0.31%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Existing Sites</td>\n",
       "      <td>OATS</td>\n",
       "      <td>18592.89</td>\n",
       "      <td>10.17</td>\n",
       "      <td>0.05%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Existing Sites</td>\n",
       "      <td>SOY</td>\n",
       "      <td>138203.91</td>\n",
       "      <td>172.08</td>\n",
       "      <td>0.12%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Existing Sites</td>\n",
       "      <td>WHEAT</td>\n",
       "      <td>42893.07</td>\n",
       "      <td>56.79</td>\n",
       "      <td>0.13%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Existing Sites</td>\n",
       "      <td>ALFALFA</td>\n",
       "      <td>134503.06</td>\n",
       "      <td>333.27</td>\n",
       "      <td>0.25%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Existing Sites</td>\n",
       "      <td>BARLEY</td>\n",
       "      <td>2622.77</td>\n",
       "      <td>0.63</td>\n",
       "      <td>0.02%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Existing Sites</td>\n",
       "      <td>CORN</td>\n",
       "      <td>501633.79</td>\n",
       "      <td>603.45</td>\n",
       "      <td>0.12%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Existing Sites</td>\n",
       "      <td>RYE</td>\n",
       "      <td>6235.81</td>\n",
       "      <td>3.69</td>\n",
       "      <td>0.06%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Existing Sites</td>\n",
       "      <td>OTHER</td>\n",
       "      <td>1897513.17</td>\n",
       "      <td>66.96</td>\n",
       "      <td>0.0%</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Scenario     Crop  Total Land (ha)  Land Used (Ha) Percentage\n",
       "0  Existing Sites      HAY        266480.87          827.10      0.31%\n",
       "1  Existing Sites     OATS         18592.89           10.17      0.05%\n",
       "2  Existing Sites      SOY        138203.91          172.08      0.12%\n",
       "3  Existing Sites    WHEAT         42893.07           56.79      0.13%\n",
       "4  Existing Sites  ALFALFA        134503.06          333.27      0.25%\n",
       "5  Existing Sites   BARLEY          2622.77            0.63      0.02%\n",
       "6  Existing Sites     CORN        501633.79          603.45      0.12%\n",
       "7  Existing Sites      RYE          6235.81            3.69      0.06%\n",
       "8  Existing Sites    OTHER       1897513.17           66.96       0.0%"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Index(['Unnamed: 0', 'Scenario', 'Crop', 'Total Land (ha)', 'Land Used (Ha)',\n",
       "       'Percentage'],\n",
       "      dtype='object')"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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q2YSERHRC3JMGOnQoQMePHgAX19fhIWFwcXFBf7+/uoE1Js3b8LI6H8dOUuWLEFCQgK+/PJLg+tMmjQJkydPBgCMHj0asbGx6NevHyIjI1G/fn34+/u/0bwSIiIiylo5Zp+RnIj7jFBex31GiCi75Lp9RoiIiOjdxTBCREREmmIYISIiIk0xjBAREZGmGEaIiIhIUwwjREREpCmGESIiItIUwwgRERFpimGEiIiINMUwQkRERJpiGCEiIiJNMYwQERGRphhGiIiISFMMI0RERKQphhEiIiLSFMMIERERaYphhIiIiDTFMEJERESaYhghIiIiTTGMEBERkaYYRoiIiEhTDCNERESkqXxv8uCIiAgEBQUhPDwcxsbGcHZ2houLC/Lnz59V9SMiIqI8LsNhRESwceNG+Pn54eTJk9DpdAbnzc3N0aJFC4wbNw41a9bMsooSERFR3pShMHLnzh106dIFVlZWaN++PSZOnIjixYujQIECUBQFT548QWhoKIKDgzF48GDUrVsXc+fOhZERR4OIiIgobekOI3fv3sXYsWOxZMkSVKpU6aXlatSogbZt22LSpEk4fPgwxo0bh5kzZ2ZJZYmIiCjvSXcY2bhxI1auXIl8+dLfmdKwYUNUqFAB27dvx2effZapChIREVHelu5kMXz4cCiKkuEncHR0RKtWrTL8OCIiIno3pHsyx8uCSGJiIry9veHg4AAbGxu0aNEC169fT9djiYiIiN5oaS8AzJ07FzY2Nvjpp59gZmaGy5cvY/To0di8eXNW1I+IiIjyuHSHkR49emDGjBkoWrSowfGEhAR8/fXX6vdNmzbF3bt3s66GRERElKelO4zMmjULY8eORaNGjdCjRw/1eK1atVChQgW4uLjA1NQU165dQ926dbOlskRERJT3pHvOiIODA1auXAkTExP06NED9+7dAwA0b94c69atQ8mSJVGwYEF4e3tj7ty52VZhIiIiylsyPGekc+fOaNy4sUEvSa1atVCrVq3sqB8RERHlcZnaGvVlvSREREREGfVG+7R37twZs2bNwvjx47F69eqsqhMRERG9Q9IdRm7cuIHWrVujUKFCKFq0KAYPHozExET2khAREdEbSXcYGTFiBNzd3bFhwwYsW7YMhQsXhp+fn3qevSRERESUGekOIxUqVMCQIUPQrFkzfPrpp/D19YVOpzMok7KX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FIRFixbhxx9/zLJKaoU7sJJe1DJnrauQbgX73kp3We7Amvts2bIF7dq1w969e+Hu7q4eL1asGGrUqIE///wzzceFhoaidOnSqXY5flG7du0wevToV04Uj4uLQ/fu3bFhwwaYmJggMDAQu3btgpGREYYPH24w7EPvroy8h2Z6mMbGxgazZ89OtUKievXq7LIjIsomXLFGeVGmw0iJEiXSPP748WMcP3480xUiIqKX44o1yosyHUbs7OwwZswYHD9+HJcuXcKhQ4fw9ddfo1q1amjQoEFW1pGIiP4fV6xRXpTpMDJmzBgoioKGDRuiSpUq+OSTTzB16lS0aNECs2bNyso6EhFRClyxRnlNplfTKIqCGTNmYPTo0fj7778hInB1deUqGiKibMYVa5TXZHo1zYsePnyIHTt2oGrVqqhRo0ZWXFJzXE1DelxNoz2upiHKXd7KapoX2dnZoWPHjli2bBl7R4iIiCjdsiyMAICpqSkWLFiA5OTkrLwsERER5WFZGkYAwNjYGOXLl8/qyxIREVEele4JrI8fP0ahQoXSVfZlN2SivM33VCetq5Ah37hu0LoKRESEDPSM/P777+m+6ItLx4iIiIheJt09I1OmTMGTJ09QoECBV5aLjo7GqVOn3rhiRERE9G5Idxi5fv06vL2901VWUZRMV4iIiIjeLekOI506dcKECROQP3/+V5aLjY3FlClT3rhiRERE9G5Idxjx8vJCpUqV0lV26NChma4QERGl7eFBD62rkG52jXZrXQXKRdI9gbVu3brpvmhGyhIREdG7Lcv3GSEiIiLKCIYRIiIi0hTDCBEREWmKYYSIiIg0xTBCREREmmIYISIiIk0xjBAREZGmGEaIiIhIUwwjREREpCmGESIiItIUwwgRERFpimGEiIiINMUwQkRERJpiGCEiIiJNMYwQERGRphhGiIiISFMMI0RERKQphhEiIiLSFMMIERERaYphhIiIiDTFMEJERESayjFhZNGiRShVqhTMzc1Rp04dnDhx4qVlz58/jy+++AKlSpWCoijw8/N742sSERGRNnJEGNm0aRN8fHwwadIknDp1CtWrV4eHhwfu37+fZvm4uDiUKVMGM2bMgKOjY5Zck4iIiLSRI8LId999h759+8LT0xOVK1fG0qVLkT9/fqxYsSLN8rVq1cLs2bPRsWNHmJmZZck1ASA+Ph7R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iCirMYzkYJs2bcLGjRsBAMnJyRrXJmtt374dnp6euHjxotZVyVLPnj3DsmXL8OzZsxy/ay8933to7969BvekyiuuXLmC//77T+tqZLnbt28DyJsfZPJim9KLYSQHunz5Mj755BN06tQJnTt3RmxsLPLly5cnPmknJyfjhx9+QJs2bVC1alVUqVJF6yplmc2bN6NatWqYO3euut8N5VwrV66EnZ0dTp06laeWST59+hRjx45FkyZN1Jt95oXXjrt376JTp054//33ERUVZbDVQ24WHh6O48eP49GjR3mmTZnx7rY8BxIRTJkyBRMmTECnTp3w77//olu3bli8eDEA5IlP2sbGxujYsSMGDBigbtmf218ojxw5gqZNm+LYsWPYunUrLl26hBIlSuT6T9sxMTEA8uantfDwcFy7dg1ubm4YMWKE1tXJUiEhIShatCh69OiBiIgIALn7tSM5ORk//vgjJkyYgHbt2mHGjBk4c+ZMrn/dAIBFixbhk08+QefOnVGmTBlMmjRJ6yppRyjHuHXrlgwcOFB0Op3B8YULF0psbKxGtXpzR44ckbt374qISHJysoiIbN++XQICAkREUrU3t7h37554e3uLlZWVKIoiDx8+VM89e/ZMw5q9ucjISOndu7fcu3dPPZZbf056MTEx6u+f3qBBg+TMmTMa1Shrvdi2gwcPyoQJE+T27dsikjt/fmvWrJFOnTrJ4sWLJSIiQkREEhIS1NeT3Grt2rXi7u4uc+bMkZCQEPH395fSpUuLoiiyadMmEcmdP683wZ4Rje3cuRPr1q0DAAQFBeHvv/9WP8UkJSUBAHr16oX8+fPnuk+oR44cgYuLC/r27avupKvvhvz3339x9+5dALnzU9vw4cPRqlUruLm5YcWKFShTpgyGDRumns/t3f4JCQk4ceIEunTpguPHjwPInT8nAIiPj8fo0aMxe/ZstbcqKSkJz549Q8GCBVG9enWNa5h5N27cwJUrVwD87+ejf52oUKECihUrhh07dhiczw0ePnwIT09P9OjRAwUKFMDAgQNhZ2eHhIQEmJiYwMbGBs+ePdO6mhkWGRmJkSNHonv37oiJicGIESNQtmxZeHh44Ntvv4WJiQl++uknALnr55UVGEY0cuvWLfTp0wcDBw7EnDlzEBkZCSsrKxQqVAgzZszAtWvXEBISgrt37+Lu3bu4c+cO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",
      "text/plain": [
       "<Figure size 600x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "\n",
    "year= 2008 # Single sets pf sites are typically existing sites, so using old CDL is recommended\n",
    "# Universal Variables\n",
    "reclassified_raster_path = fr\"{root_dir}/Data/Rasters/Reclassified/Cropland{year}.tif\"\n",
    "\n",
    "fc = 'Detected_Sites'\n",
    "output_csv = f'{root_dir}/Data/Tables/Outputs/Existing_Sites_Crop_Losses.csv'\n",
    "\n",
    "# Load solar site polygons \n",
    "Solar_site_polys= gpd.read_file(gpk_path, layer=fc)\n",
    "\n",
    "# Outputs\n",
    "fragged_raster_path = f'{root_dir}/msc/tmp/frag_Crop.tif'  # Remapped CDL raster that has been clipped to the individual solar site boundaries\n",
    "\n",
    "# Create a master DataFrame to store results\n",
    "master_df = pd.DataFrame()\n",
    "#########################################################################################\n",
    "# Load the solar polygons and create a new raster where only solar areas have crop values\n",
    "#########################################################################################\n",
    "# Load the raster\n",
    "with rasterio.open(reclassified_raster_path) as src:\n",
    "    raster = src.read(1)\n",
    "    raster_meta = src.meta\n",
    "\n",
    "    # Get the geometries of the polygons\n",
    "    geometries = [mapping(geom) for geom in Solar_site_polys.geometry]\n",
    "\n",
    "    # Create a mask for the raster based on the polygons\n",
    "    mask = geometry_mask(geometries, transform=src.transform, invert=True, out_shape=(src.height, src.width))\n",
    "\n",
    "    # Apply the mask to the raster\n",
    "    masked_raster = raster.copy()\n",
    "    masked_raster[~mask] = src.nodata\n",
    "\n",
    "# Save the masked raster\n",
    "with rasterio.open(fragged_raster_path, 'w', **raster_meta) as dest:\n",
    "    dest.write(masked_raster, 1)\n",
    "\n",
    "# Tabulate total crop areas inside the boundary polygon\n",
    "cover_df_i = pd.read_csv(land_cover_remap_table)\n",
    "cover_df = cover_df_i.filter(['New Classes', 'NewID'], axis=1)\n",
    "cover_df.dropna(subset=['New Classes', 'NewID'], inplace=True)\n",
    "cover_df['New ID'] = cover_df['NewID'].astype(int)\n",
    "cover_df = cover_df.drop('NewID', axis=1)\n",
    "\n",
    "\n",
    "\n",
    "# Open the raster file\n",
    "raster = rasterio.open(fragged_raster_path)\n",
    "\n",
    "# Calculate zonal statistics\n",
    "stats = zonal_stats(state_gdf, fragged_raster_path, stats=\"count\", categorical=True, nodata=raster.nodata)\n",
    "\n",
    "# Convert the list of dicts to a DataFrame\n",
    "stats_df = pd.DataFrame(stats)\n",
    "stats_df = stats_df.fillna(0)  # Replace NaN with 0 where no data for a category\n",
    "\n",
    "# Convert categorical columns to integers, keeping 'count' as it is\n",
    "new_columns = {}\n",
    "for col in stats_df.columns:\n",
    "    try:\n",
    "        new_columns[col] = int(col)\n",
    "    except ValueError:\n",
    "        new_columns[col] = col\n",
    "\n",
    "stats_df.rename(columns=new_columns, inplace=True)\n",
    "\n",
    "# Convert cell counts to hectares\n",
    "cell_size_ha = 900 / 10000  # 0.09 hectares per cell\n",
    "for col in stats_df.columns:\n",
    "    if col != 'count':\n",
    "        stats_df[col] *= cell_size_ha\n",
    "\n",
    "# Rename columns based on mapping\n",
    "for index, row in cover_df.iterrows():\n",
    "    column_name = row['New ID']\n",
    "    if column_name in stats_df.columns:\n",
    "        new_column_name = f\"{row['New Classes']}\"\n",
    "        stats_df.rename(columns={column_name: new_column_name}, inplace=True)\n",
    "\n",
    "# Ensure all column names are strings after renaming\n",
    "stats_df.columns = stats_df.columns.astype(str)\n",
    "\n",
    "print(\"Zonal statistics added, converted to hectares, and columns renamed based on class names.\")\n",
    "\n",
    "\n",
    "# Define the crop fields to sum\n",
    "crop_fields = [\n",
    "    'HAY',\n",
    "    'OATS',\n",
    "    'SOY',\n",
    "    'WHEAT',\n",
    "    'ALFALFA',\n",
    "    'BARLEY',\n",
    "    'CORN',\n",
    "    'RYE',\n",
    "    'OTHER'\n",
    "]\n",
    "# Sum the areas for each crop\n",
    "for col in crop_fields:\n",
    "    if col not in stats_df.columns:\n",
    "        stats_df[col]= 0\n",
    "    \n",
    "crop_areas = stats_df[crop_fields].sum().to_dict()\n",
    "\n",
    "print(\"Crop areas in hectares:\")\n",
    "print(crop_areas)\n",
    "\n",
    "# Function to convert acres to hectares\n",
    "def acres_to_hectares(acres):\n",
    "    return acres * 0.404686\n",
    "\n",
    "# Initialize a dictionary to store the total area for each crop\n",
    "csv_crop_areas = {}\n",
    "total_cropland = 0\n",
    "for filename in os.listdir(coa_areas):\n",
    "    if filename.endswith('.csv'):\n",
    "        crop_name = filename.split('.')[0]  # Assuming the filename is the crop name\n",
    "        csv_path = os.path.join(coa_areas, filename)\n",
    "\n",
    "        # Read the CSV file\n",
    "        df = pd.read_csv(csv_path, thousands=',')\n",
    "\n",
    "        # Convert the 'Value' column to numeric, coercing errors to NaN, and then drop NaNs\n",
    "        df['Value'] = pd.to_numeric(df['Value'], errors='coerce')\n",
    "        df = df.dropna(subset=['Value'])\n",
    "\n",
    "        # Sum the \"Value\" fields and convert to hectares\n",
    "        total_area_acres = df['Value'].sum()\n",
    "        total_area_hectares = acres_to_hectares(total_area_acres)\n",
    "\n",
    "        # Store the result in the dictionary\n",
    "        csv_crop_areas[crop_name] = round(total_area_hectares, 2)\n",
    "        total_cropland += total_area_hectares\n",
    "\n",
    "\n",
    "\n",
    "# Initialize a dictionary to store the percentage of the total area for each crop\n",
    "crop_area_percentages = {}\n",
    "\n",
    "# Calculate the percentage for each crop\n",
    "for crop, shapefile_area in crop_areas.items():\n",
    "    if crop in csv_crop_areas:\n",
    "        total_area = round(csv_crop_areas[crop], 2)\n",
    "        percentage = round((shapefile_area / total_area) * 100, 2)\n",
    "        percentage_str = f'{percentage}%'\n",
    "        crop_area_percentages[crop] = percentage_str\n",
    "    else:\n",
    "        print(f\"Crop {crop} not found in CSV files.\")\n",
    "\n",
    "print(f'Percentage of total area used by each crop:\" {crop_area_percentages}')\n",
    "print()\n",
    "\n",
    "# Create a DataFrame to organize the results\n",
    "results = {\n",
    "    'Scenario': 'Existing Sites',\n",
    "    'Crop': crop_areas.keys(),\n",
    "    'Total Land (ha)': [csv_crop_areas[crop] for crop in crop_areas.keys()],\n",
    "    'Land Used (Ha)': [crop_areas[crop] for crop in crop_areas.keys()],\n",
    "    'Percentage': [crop_area_percentages[crop] for crop in crop_areas.keys()]\n",
    "}\n",
    "\n",
    "df_results = pd.DataFrame(results)\n",
    "display(df_results)\n",
    "#df_results.to_csv(fr'{root_dir}\\\\Results\\Existing_Sites_Cropland_Losses.csv', index = False)\n",
    "# Append the results to the master DataFrame\n",
    "master_df = pd.concat([master_df, df_results], ignore_index=True)\n",
    "\n",
    "master_df.to_csv(output_csv)\n",
    "\n",
    "###################\n",
    "# Plot the Results\n",
    "###################\n",
    "\n",
    "\n",
    "\n",
    "font_properties = {\n",
    "    'family': 'Times New Roman',  # Choose font family (e.g., 'sans-serif', 'serif', 'monospace')\n",
    "    'style': 'normal',  # Choose font style (e.g., 'normal', 'italic', 'oblique')\n",
    "    'weight': 'normal',   # Choose font weight (e.g., 'normal', 'bold', 'light')\n",
    "    'size': 12          # Font size\n",
    "}\n",
    "\n",
    "# Load the DataFrame\n",
    "df = pd.read_csv(output_csv)  # Ensure this path is correct\n",
    "#display(df)\n",
    "unique_scenarios = ['Existing Sites']\n",
    "\n",
    "for scenario in unique_scenarios:\n",
    "    wdf = df[df['Scenario'] == scenario].copy()\n",
    "\n",
    "    # Paths for reading and saving\n",
    "\n",
    "    graph_path = fr'{root_dir}/Outputs/Figures/Existing_Crops.jpg'\n",
    "    display(wdf.columns)\n",
    "    # Calculate Losses\n",
    "    wdf['Losses'] = (wdf['Land Used (Ha)'] / wdf['Total Land (ha)']) * 100\n",
    "    losses = wdf[['Crop', 'Losses']].set_index('Crop')\n",
    "\n",
    "    # Order list and color mapping\n",
    "    order = ['OATS', 'SOY', 'WHEAT', 'ALFALFA', 'BARLEY', 'CORN', 'RYE', 'OTHER']\n",
    "    color_mapping = {\n",
    "        'OATS': '#eddbb9',\n",
    "        'SOY': '#7dcd58',\n",
    "        'WHEAT': '#f09a1c',\n",
    "        'ALFALFA': '#6f9f6f',\n",
    "        'BARLEY': '#99944c',\n",
    "        'CORN': '#ecbf46',\n",
    "        'RYE': '#abbdb1',\n",
    "        'OTHER': '#9d9e99'\n",
    "    }\n",
    "\n",
    "    # Reorder the losses DataFrame\n",
    "    ordered_area_sums = losses.reindex(order).fillna(0)\n",
    "\n",
    "    # Create a figure and axis for plotting\n",
    "    fig, ax = plt.subplots(figsize=(x_dim, y_dim))\n",
    "\n",
    "    # Plot the bar graph\n",
    "    bars = ax.bar(ordered_area_sums.index, ordered_area_sums['Losses'], color=[color_mapping.get(crop, '#000000') for crop in ordered_area_sums.index])\n",
    "\n",
    "    plt.xlabel('Crop Type', fontdict=font_properties)\n",
    "    plt.ylabel('Losses (%)', fontdict=font_properties)\n",
    "    plt.xticks(rotation=30, ha='right', fontproperties=font_properties)\n",
    "    plt.ylim(0, .3)  # Adjust y-limit based on max value\n",
    "\n",
    "    # Add labels to each bar\n",
    "    for bar in bars:\n",
    "        height = bar.get_height()\n",
    "        ax.text(bar.get_x() + bar.get_width() / 2, height + ordered_area_sums['Losses'].max() * 0.02, f'{height:.2f}%', ha='center', va='bottom', fontproperties=font_properties)\n",
    "\n",
    "    # Save the plot as an image file\n",
    "    plt.savefig(graph_path, dpi=600, format='jpg', bbox_inches='tight')\n",
    "\n",
    "   \n",
    "    plt.show()\n",
    "# remove temporary raster files from temp directory\n",
    "if not raster.closed:\n",
    "    raster.close()\n",
    "os.remove(fragged_raster_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Looped version of the process above so that the calculation can be completed for multiple scenario datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['No_Restrictions_SAT', 'NoMSG1_4_SAT']\n",
      "Zonal statistics added, converted to hectares, and columns renamed based on class names.\n",
      "Crop areas in hectares:\n",
      "{'HAY': 13779.18, 'OATS': 693.63, 'SOY': 4013.91, 'WHEAT': 4104.72, 'ALFALFA': 10012.05, 'BARLEY': 42.48, 'CORN': 19626.57, 'RYE': 205.92, 'OTHER': 2211.93}\n",
      "Percentage of total area used by each crop:\" {'HAY': '5.17%', 'OATS': '3.73%', 'SOY': '2.9%', 'WHEAT': '9.57%', 'ALFALFA': '7.44%', 'BARLEY': '1.62%', 'CORN': '3.91%', 'RYE': '3.3%', 'OTHER': '0.12%'}\n",
      "\n",
      "Zonal statistics added, converted to hectares, and columns renamed based on class names.\n",
      "Crop areas in hectares:\n",
      "{'HAY': 17150.22, 'OATS': 664.29, 'SOY': 3121.92, 'WHEAT': 3023.8199999999997, 'ALFALFA': 8808.48, 'BARLEY': 29.97, 'CORN': 15949.08, 'RYE': 92.25, 'OTHER': 1224.45}\n",
      "Percentage of total area used by each crop:\" {'HAY': '6.44%', 'OATS': '3.57%', 'SOY': '2.26%', 'WHEAT': '7.05%', 'ALFALFA': '6.55%', 'BARLEY': '1.14%', 'CORN': '3.18%', 'RYE': '1.48%', 'OTHER': '0.06%'}\n",
      "\n"
     ]
    }
   ],
   "source": [
    "\n",
    "\n",
    "# Universal Variables\n",
    "year= 2023 # Single sets pf sites are typically existing sites, so using old CDL is recommended\n",
    "# Universal Variables\n",
    "site_types = ['SAT']#The site types that you would like graphs of. (possible options: 'SAT', 'Lg', 'FA')\n",
    "desired_scenarios = ['No_Restrictions', 'NoMSG1_4'] # The scenarios that you would like to produce graphs of\n",
    "all_combinations = []\n",
    "for type in site_types:\n",
    "    for scenario in desired_scenarios:\n",
    "        combination = f'{scenario}_{type}'\n",
    "        all_combinations.append(combination)\n",
    "print(all_combinations)\n",
    "# define feature class name\n",
    "fc = 'Potential_Future_Sites_new'\n",
    "output_csv = f'{root_dir}/Data/Tables/Outputs/Future_Crop_Losses.csv'\n",
    "\n",
    "# Load all polygons to get unique scenarios\n",
    "polygons = gpd.read_file(gpk_path, layer=fc)\n",
    "unique_scenarios = polygons[\"Scenario and Type\"].unique()\n",
    "\n",
    "# Create a master DataFrame to store results for all scenarios\n",
    "master_df = pd.DataFrame()\n",
    "\n",
    "for scenario in unique_scenarios:\n",
    "    if scenario not in all_combinations:\n",
    "        continue\n",
    "     # Load the polygons for the current scenario using where parameter\n",
    "    Solar_site_polys = gpd.read_file(gpk_path, layer=fc, where=f\"\\\"Scenario and Type\\\" = '{scenario}'\", columns=['Scenario and Type', 'Scenario', 'Type'])\n",
    "  \n",
    "    # Outputs\n",
    "    fragged_raster_path = f'{root_dir}/msc/tmp/Fragged_Crop_Areas{scenario}.tif'  # Remapped CDL raster that has been clipped to the individual solar site boundaries\n",
    "    \n",
    "\n",
    "    # Load the raster\n",
    "    with rasterio.open(reclassified_raster_path) as src:\n",
    "        raster = src.read(1)\n",
    "        raster_meta = src.meta\n",
    "\n",
    "        # Get the geometries of the polygons in the shapefile\n",
    "        geometries = [mapping(geom) for geom in Solar_site_polys.geometry]\n",
    "\n",
    "        # Create a mask for the raster based on the polygons\n",
    "        mask = geometry_mask(geometries, transform=src.transform, invert=True, out_shape=(src.height, src.width))\n",
    "\n",
    "        # Apply the mask to the raster\n",
    "        masked_raster = raster.copy()\n",
    "        masked_raster[~mask] = src.nodata\n",
    "\n",
    "    # Save the masked raster\n",
    "    with rasterio.open(fragged_raster_path, 'w', **raster_meta) as dest:\n",
    "        dest.write(masked_raster, 1)\n",
    "\n",
    "    # Tabulate total crop areas inside the boundary polygon\n",
    "    cover_df = pd.read_csv(land_cover_remap_table)\n",
    "    #cover_df = cover_df_i.filter(['New Classes', 'NewID'], axis=1)\n",
    "    if 'New Classes' in cover_df.columns and 'NewID' in cover_df.columns:\n",
    "        cover_df.dropna(subset=['New Classes', 'NewID'], inplace=True)\n",
    "        cover_df['New ID'] = cover_df['NewID'].astype(int)\n",
    "        cover_df = cover_df.drop('NewID', axis=1)\n",
    "    else:\n",
    "        print(f\"Columns 'New Classes' and 'NewID' not found in the CSV. Available columns: {cover_df.columns}\")\n",
    "        continue  # Skip this iteration if the required columns are not found\n",
    "\n",
    "    # Open the raster file\n",
    "    raster = rasterio.open(fragged_raster_path)\n",
    "\n",
    "    # Calculate zonal statistics\n",
    "    stats = zonal_stats(state_gdf, fragged_raster_path, stats=\"count\", categorical=True, nodata=raster.nodata)\n",
    "\n",
    "    # Convert the list of dicts to a DataFrame\n",
    "    stats_df = pd.DataFrame(stats)\n",
    "    stats_df = stats_df.fillna(0)  # Replace NaN with 0 where no data for a category\n",
    "    \n",
    "    # Convert categorical columns to integers, keeping 'count' as it is\n",
    "    new_columns = {}\n",
    "    for col in stats_df.columns:\n",
    "        try:\n",
    "            new_columns[col] = int(col)\n",
    "        except ValueError:\n",
    "            new_columns[col] = col\n",
    "\n",
    "    stats_df.rename(columns=new_columns, inplace=True)\n",
    "    \n",
    "    # Convert cell counts to hectares\n",
    "    cell_size_ha = 900 / 10000  # 0.09 hectares per cell\n",
    "    for col in stats_df.columns:\n",
    "        if col != 'count':\n",
    "            stats_df[col] *= cell_size_ha\n",
    "\n",
    "    # Rename columns based on mapping\n",
    "    for index, row in cover_df.iterrows():\n",
    "        column_name = row['New ID']\n",
    "        if column_name in stats_df.columns:\n",
    "            new_column_name = f\"{row['New Classes']}\"\n",
    "            stats_df.rename(columns={column_name: new_column_name}, inplace=True)\n",
    "\n",
    "    # Ensure all column names are strings after renaming\n",
    "    stats_df.columns = stats_df.columns.astype(str)\n",
    "   \n",
    "    print(\"Zonal statistics added, converted to hectares, and columns renamed based on class names.\")\n",
    "\n",
    "    \n",
    "    # Define the crop fields to sum\n",
    "    crop_fields = [\n",
    "        'HAY',\n",
    "        'OATS',\n",
    "        'SOY',\n",
    "        'WHEAT',\n",
    "        'ALFALFA',\n",
    "        'BARLEY',\n",
    "        'CORN',\n",
    "        'RYE',\n",
    "        'OTHER'\n",
    "    ]\n",
    "    # Sum the areas for each crop\n",
    "    for col in crop_fields:\n",
    "        if col not in stats_df.columns:\n",
    "            stats_df[col]= 0\n",
    "        \n",
    "    crop_areas = stats_df[crop_fields].sum().to_dict()\n",
    "\n",
    "    print(\"Crop areas in hectares:\")\n",
    "    print(crop_areas)\n",
    "\n",
    "    # Function to convert acres to hectares\n",
    "    def acres_to_hectares(acres):\n",
    "        return acres * 0.404686\n",
    "\n",
    "    # Initialize a dictionary to store the total area for each crop\n",
    "    csv_crop_areas = {}\n",
    "    total_cropland = 0\n",
    "    for filename in os.listdir(coa_areas):\n",
    "        if filename.endswith('.csv'):\n",
    "            crop_name = filename.split('.')[0]  # Assuming the filename is the crop name\n",
    "            csvs = os.path.join(coa_areas, filename)\n",
    "\n",
    "            # Read the CSV file\n",
    "            df = pd.read_csv(csvs, thousands=',')\n",
    "\n",
    "            # Convert the 'Value' column to numeric, coercing errors to NaN, and then drop NaNs\n",
    "            df['Value'] = pd.to_numeric(df['Value'], errors='coerce')\n",
    "            df = df.dropna(subset=['Value'])\n",
    "\n",
    "            # Sum the \"Value\" fields and convert to hectares\n",
    "            total_area_acres = df['Value'].sum()\n",
    "            total_area_hectares = acres_to_hectares(total_area_acres)\n",
    "\n",
    "            # Store the result in the dictionary\n",
    "            csv_crop_areas[crop_name] = round(total_area_hectares, 2)\n",
    "            total_cropland += total_area_hectares\n",
    "\n",
    "\n",
    "    # Initialize a dictionary to store the percentage of the total area for each crop\n",
    "    crop_area_percentages = {}\n",
    "\n",
    "    # Calculate the percentage for each crop\n",
    "    for crop, shapefile_area in crop_areas.items():\n",
    "        if crop in csv_crop_areas:\n",
    "            total_area = round(csv_crop_areas[crop], 2)\n",
    "            percentage = round((shapefile_area / total_area) * 100, 2)\n",
    "            percentage_str = f'{percentage}%'\n",
    "            crop_area_percentages[crop] = percentage_str\n",
    "        else:\n",
    "            print(f\"Crop {crop} not found in CSV files.\")\n",
    "\n",
    "    print(f'Percentage of total area used by each crop:\" {crop_area_percentages}')\n",
    "    print()\n",
    "\n",
    "    # Create a DataFrame to organize the results\n",
    "    crop_keys = list(crop_areas.keys())\n",
    "    results = {\n",
    "         'Scenario': [scenario] * len(crop_keys),\n",
    "        'Crop': crop_areas.keys(),\n",
    "        'Total Land (Ha)': [csv_crop_areas[crop] for crop in crop_areas.keys()],\n",
    "        'Land Used (Ha)': [crop_areas[crop] for crop in crop_areas.keys()],\n",
    "        'Percentage': [crop_area_percentages[crop] for crop in crop_areas.keys()]\n",
    "    }\n",
    "    #display(results)\n",
    "    df_results = pd.DataFrame(results)\n",
    "   \n",
    "    # Append the results to the master DataFrame\n",
    "    master_df = pd.concat([master_df, df_results], ignore_index=True)\n",
    "    #Delete temporary fragmented raster\n",
    "    if not raster.closed:\n",
    "        raster.close()\n",
    "    os.remove(fragged_raster_path)\n",
    "        \n",
    "\n",
    "# Save the master DataFrame to a CSV file\n",
    "master_df.to_csv(output_csv)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Graph output results and make a panel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>Scenario</th>\n",
       "      <th>Crop</th>\n",
       "      <th>Total Land (Ha)</th>\n",
       "      <th>Land Used (Ha)</th>\n",
       "      <th>Percentage</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>No_Restrictions_SAT</td>\n",
       "      <td>HAY</td>\n",
       "      <td>266480.87</td>\n",
       "      <td>13779.18</td>\n",
       "      <td>5.17%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>No_Restrictions_SAT</td>\n",
       "      <td>OATS</td>\n",
       "      <td>18592.89</td>\n",
       "      <td>693.63</td>\n",
       "      <td>3.73%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>No_Restrictions_SAT</td>\n",
       "      <td>SOY</td>\n",
       "      <td>138203.91</td>\n",
       "      <td>4013.91</td>\n",
       "      <td>2.9%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>No_Restrictions_SAT</td>\n",
       "      <td>WHEAT</td>\n",
       "      <td>42893.07</td>\n",
       "      <td>4104.72</td>\n",
       "      <td>9.57%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>No_Restrictions_SAT</td>\n",
       "      <td>ALFALFA</td>\n",
       "      <td>134503.06</td>\n",
       "      <td>10012.05</td>\n",
       "      <td>7.44%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>No_Restrictions_SAT</td>\n",
       "      <td>BARLEY</td>\n",
       "      <td>2622.77</td>\n",
       "      <td>42.48</td>\n",
       "      <td>1.62%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>No_Restrictions_SAT</td>\n",
       "      <td>CORN</td>\n",
       "      <td>501633.79</td>\n",
       "      <td>19626.57</td>\n",
       "      <td>3.91%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7</td>\n",
       "      <td>No_Restrictions_SAT</td>\n",
       "      <td>RYE</td>\n",
       "      <td>6235.81</td>\n",
       "      <td>205.92</td>\n",
       "      <td>3.3%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "      <td>No_Restrictions_SAT</td>\n",
       "      <td>OTHER</td>\n",
       "      <td>1897513.17</td>\n",
       "      <td>2211.93</td>\n",
       "      <td>0.12%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "      <td>NoMSG1_4_SAT</td>\n",
       "      <td>HAY</td>\n",
       "      <td>266480.87</td>\n",
       "      <td>17150.22</td>\n",
       "      <td>6.44%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>10</td>\n",
       "      <td>NoMSG1_4_SAT</td>\n",
       "      <td>OATS</td>\n",
       "      <td>18592.89</td>\n",
       "      <td>664.29</td>\n",
       "      <td>3.57%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>11</td>\n",
       "      <td>NoMSG1_4_SAT</td>\n",
       "      <td>SOY</td>\n",
       "      <td>138203.91</td>\n",
       "      <td>3121.92</td>\n",
       "      <td>2.26%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>12</td>\n",
       "      <td>NoMSG1_4_SAT</td>\n",
       "      <td>WHEAT</td>\n",
       "      <td>42893.07</td>\n",
       "      <td>3023.82</td>\n",
       "      <td>7.05%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>13</td>\n",
       "      <td>NoMSG1_4_SAT</td>\n",
       "      <td>ALFALFA</td>\n",
       "      <td>134503.06</td>\n",
       "      <td>8808.48</td>\n",
       "      <td>6.55%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>14</td>\n",
       "      <td>NoMSG1_4_SAT</td>\n",
       "      <td>BARLEY</td>\n",
       "      <td>2622.77</td>\n",
       "      <td>29.97</td>\n",
       "      <td>1.14%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>15</td>\n",
       "      <td>NoMSG1_4_SAT</td>\n",
       "      <td>CORN</td>\n",
       "      <td>501633.79</td>\n",
       "      <td>15949.08</td>\n",
       "      <td>3.18%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>16</td>\n",
       "      <td>NoMSG1_4_SAT</td>\n",
       "      <td>RYE</td>\n",
       "      <td>6235.81</td>\n",
       "      <td>92.25</td>\n",
       "      <td>1.48%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>17</td>\n",
       "      <td>NoMSG1_4_SAT</td>\n",
       "      <td>OTHER</td>\n",
       "      <td>1897513.17</td>\n",
       "      <td>1224.45</td>\n",
       "      <td>0.06%</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Unnamed: 0             Scenario     Crop  Total Land (Ha)  Land Used (Ha)  \\\n",
       "0            0  No_Restrictions_SAT      HAY        266480.87        13779.18   \n",
       "1            1  No_Restrictions_SAT     OATS         18592.89          693.63   \n",
       "2            2  No_Restrictions_SAT      SOY        138203.91         4013.91   \n",
       "3            3  No_Restrictions_SAT    WHEAT         42893.07         4104.72   \n",
       "4            4  No_Restrictions_SAT  ALFALFA        134503.06        10012.05   \n",
       "5            5  No_Restrictions_SAT   BARLEY          2622.77           42.48   \n",
       "6            6  No_Restrictions_SAT     CORN        501633.79        19626.57   \n",
       "7            7  No_Restrictions_SAT      RYE          6235.81          205.92   \n",
       "8            8  No_Restrictions_SAT    OTHER       1897513.17         2211.93   \n",
       "9            9         NoMSG1_4_SAT      HAY        266480.87        17150.22   \n",
       "10          10         NoMSG1_4_SAT     OATS         18592.89          664.29   \n",
       "11          11         NoMSG1_4_SAT      SOY        138203.91         3121.92   \n",
       "12          12         NoMSG1_4_SAT    WHEAT         42893.07         3023.82   \n",
       "13          13         NoMSG1_4_SAT  ALFALFA        134503.06         8808.48   \n",
       "14          14         NoMSG1_4_SAT   BARLEY          2622.77           29.97   \n",
       "15          15         NoMSG1_4_SAT     CORN        501633.79        15949.08   \n",
       "16          16         NoMSG1_4_SAT      RYE          6235.81           92.25   \n",
       "17          17         NoMSG1_4_SAT    OTHER       1897513.17         1224.45   \n",
       "\n",
       "   Percentage  \n",
       "0       5.17%  \n",
       "1       3.73%  \n",
       "2        2.9%  \n",
       "3       9.57%  \n",
       "4       7.44%  \n",
       "5       1.62%  \n",
       "6       3.91%  \n",
       "7        3.3%  \n",
       "8       0.12%  \n",
       "9       6.44%  \n",
       "10      3.57%  \n",
       "11      2.26%  \n",
       "12      7.05%  \n",
       "13      6.55%  \n",
       "14      1.14%  \n",
       "15      3.18%  \n",
       "16      1.48%  \n",
       "17      0.06%  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhUAAAHmCAYAAADECnxUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABf10lEQVR4nO3dd1gUV9sG8HtAREVAwQaKLWossZcYeze2iDEaW6LYBRVFRDH2hiUqxt57jS0kGqPGWJLYYkNjxS6iRlGaUvf5/vDbeVkBRRx2Wbl/18WVMDO7POPuzt5z5sw5iogIiIiIiN6ThakLICIiog8DQwURERFpgqGCiIiINMFQQURERJpgqCAiIiJNMFQQERGRJhgqiIiISBMMFURERKSJLKYuwFh0Oh0ePHgAW1tbKIpi6nKIiIjMhoggIiICzs7OsLBIuT0i04SKBw8ewMXFxdRlEBERma179+6hUKFCKa7PNKHC1tYWwKt/EDs7OxNXQ0REZD7Cw8Ph4uKifpemJNOECv0lDzs7O4YKIiKiNHhb9wF21CQiIiJNMFQQERGRJhgqiIiISBMMFURERKQJhgoiIiLSBEMFERERaYKhgoiIiDTBUEFERESaYKggIiIiTTBUEBERkSYYKoiIiEgTDBVERESkCYYKIiIi0gRDBREREWmCoYKIiIg0wVBBREREmmCoICIiIk0wVBAREZEmGCqIiIhIEwwVREREpAmGCiIiItIEQwURERFpgqGCiIiINMFQQURERJpgqCAiIiJNMFQQERGRJhgqiIiISBMZIlQcOXIEbdq0gbOzMxRFwa5duwzWiwjGjh0LJycnZM+eHU2aNMH169dNUywRERElK0OEiqioKFSsWBELFixIdv2MGTPwww8/YPHixThx4gRsbGzQvHlzREdHG7lSIiIiSkkWUxcAAC1atECLFi2SXSci8Pf3x+jRo9G2bVsAwNq1a5E/f37s2rULnTp1MmapRERElIIM0VLxJrdu3cLDhw/RpEkTdZm9vT0+/fRTHDt2zISVERERUWIZoqXiTR4+fAgAyJ8/v8Hy/Pnzq+uSExMTg5iYGPX38PDw9CmQiIiIAJhBS0Va+fn5wd7eXv1xcXExdUlEREQftAwfKgoUKAAAePTokcHyR48eqeuS4+vri7CwMPXn3r176VonERFRZpfhQ0WxYsVQoEAB/P777+qy8PBwnDhxAp999lmKj7O2toadnZ3BDxEREaWfDNGnIjIyEkFBQervt27dwrlz5+Dg4IDChQtjyJAhmDx5MkqWLIlixYphzJgxcHZ2hqurq+mKJiIiIgMZIlT8888/aNiwofq7l5cXAKB79+5YvXo1fHx8EBUVhb59++L58+eoU6cO9u7di2zZspmqZCIiInqNIiJi6iKMITw8HPb29ggLC+OlECIioneQ2u/QDN+ngoiIiMwDQwURERFpgqGCiIiINMFQQURERJpgqCAiIiJNMFQQERGRJhgqiIiISBMMFURERKQJhgoiIiLSBEMFERERaYKhgoiIiDTBUEFERESaYKggIiIiTTBUEBERkSYYKoiIiEgTDBVERESkCYYKIiIi0gRDBREREWmCoYKIiIg0wVBBREREmmCoICIiIk0wVBAREZEmGCqIiIhIEwwVREREpAmGCiIiItIEQwURERFpgqGCiIiINMFQQURERJpgqCAiIiJNMFQQERGRJhgqiIiISBMMFURERKQJhgoiIiLSBEMFERERaYKhgoiIiDTBUEFERESaYKggIiIiTTBUEBERkSYYKoiIiEgTDBVERESkCYYKIiIi0gRDBREREWmCoYKIiIg0wVBBREREmmCoICIiIk0wVBAREZEmGCqIiIhIEwwVREREpAmGCiIiItIEQwURERFpgqGCiIiINMFQQURERJpgqCAiIiJNMFQQERGRJhgqiIiISBMMFURERKQJhgoiIiLSBEMFERERaYKhgoiIiDRhFqEiISEBY8aMQbFixZA9e3Z89NFHmDRpEkTE1KURERHR/8ti6gJSY/r06Vi0aBHWrFmDcuXK4Z9//oGbmxvs7e0xePBgU5dHREREMJNQ8ffff6Nt27Zo1aoVAKBo0aLYtGkTTp48aeLKiIiISM8sLn/UqlULv//+O65duwYAOH/+PP7880+0aNHCxJURERGRnlm0VIwcORLh4eEoXbo0LC0tkZCQgClTpqBr164pPiYmJgYxMTHq7+Hh4cYolYiIKNMyi5aKrVu3YsOGDdi4cSPOnDmDNWvW4Pvvv8eaNWtSfIyfnx/s7e3VHxcXFyNWTERElPkoYga3ULi4uGDkyJHw8PBQl02ePBnr16/HlStXkn1Mci0VLi4uCAsLg52dXbrXTERE9KEIDw+Hvb39W79DzeLyx4sXL2BhYdioYmlpCZ1Ol+JjrK2tYW1tnd6lERER0f8zi1DRpk0bTJkyBYULF0a5cuVw9uxZzJ49Gz179jR1aURERPT/zOLyR0REBMaMGYOdO3fi8ePHcHZ2RufOnTF27FhkzZo1Vc+R2qYbIiIiMpTa71CzCBVaYKggIiJKm9R+h5rF3R9ERESU8TFUEBERkSYYKoiIiEgTDBVERESkCYYKIiIi0gRDBREREWmCoYLoLfz8/KAoSpKfYcOGJbv9s2fP0K1bNwwZMgSdOnVSZ9clIvrQmcWImkSm9Ouvv8LPzw8FChRQl02ZMgWtW7dOsq2IoE2bNvj222/Rt29fnDlzBk2bNsXFixdha2trzLKJiIyOg18RvcHVq1eRkJCAsmXLqssiIyPx8ccf4+7du7C0tDTY/scff0TXrl0RFhaG7NmzAwBKly6Nrl27YsyYMUatnYhIKxz8ikgDH3/8sUGgAIC9e/eiadOmSQIFAGzbtg2lS5dWAwUAVK1aFVu2bEn3WomITI2hgugd/fTTT2jXrl2y606ePAlHR0eDZfny5cPly5cRExNjjPKIiEyGoYLoHcTHx+PQoUNo1qxZsusfP34MBwcHg2W2trbQ6XQIDQ01RolERCbDUEH0Do4ePYrq1asbXN5ITFGUJOsSEhIAAFZWVuleHxGRKTFUEL2Dn376Ca6urimud3JyQlhYmMGyyMhIWFpaJmnBICL60DBUEL2DPXv2JHsrqV7FihXx+PFjg2UPHz5E1apVYWHBjxsRfdh4lCNKpcDAQLi4uLyxxaFbt244f/68QafMwMBAfPXVV8YokYjIpBgqiFIpubs+Dhw4gGrVquHRo0cAgDZt2uCTTz7B7t27Aby6GyQmJgbu7u5Gr5eIyNg4oiZRKgUEBGDnzp0Gy54/f47bt2+rLROWlpYICAiAl5cXjh8/jpCQEPz++++wsbExRclEREbFETWJiIjojTiiJhERERkVQwURERFpgqGCiIiINMFQQURERJpgqCAiIiJNMFQQEQBg37598PLywqJFi3Dp0qUUtxs6dCgURVF/Nm/ebMQqiSgj4zgVRJmciMDb2xsRERFYuHAhsmRJ+bDw7Nkz3LhxA3PmzAEAWFhYcLRQIlIxVBBlcqNHj8a5c+ewb98+WFpavnHbhQsXYvLkyahQoYKRqiMic8LBryhTCVvmYuoS3ol9n3vp+vwnTpxA3bp1ERQUhMKFC79x2+joaBQpUgR58uRBhw4d4OXlxc8SUSbBwa+I6K0mTZqEGjVqYPXq1WjSpAlq166NgwcPJrvtpUuX0KBBA8TFxWHChAmoUKECrl+/buSKiSgjY6ggyqSioqKwf/9+ODs7w9PTE7/++isKFiyIli1b4tatW0m2r1KlCrZs2YJr165h586deP78OTp06IBM0thJRKnAUEGUSd28eROxsbH4+uuvYW9vDysrK0yZMgUxMTGYN2/eGx/r6uqKrVu34vz58zh27JiRKiaijI6hgiiTioyMBADkzJlTXVayZEm4uLjg2rVrb318s2bNULVqVdy+fTu9SiQiM8NQQZRJFSpUCAAQGhpqsDx//vxwcHBI1XMUL15cfR4iIoYKokzKxcUFFSpUSHL5IjQ0FI0bN37r4xMSEvDy5UvUqlUrvUokIjPDUEGUiU2fPh2bNm3CkydPAAD//PMPsmfPji5duuDAgQOoVq0aHj16BACYMGECJk2ahOjoaMTGxuK7776Dr6/vGwfLIqLMhUcDokzs888/x4IFC9CvXz9UqlQJd+/exd69e2FlZYXnz5/j9u3biImJAQDkzp0b48aNw6JFi1C3bl2MHz8eZcqUMfEeEFFGwsGvKFPh4FdERO+Og18RERGRUTFUEBERkSYYKoiIiEgTDBVERESkCYYKIiIi0gRDBREREWmCoYKIiIg0wVBBREREmuCImkQfiCGrh5i6hFTz7+Fv6hKIKB28V6h48uQJzp8/j0ePHsHS0hIuLi6oVKkScuTIoVV9REREZCbeOVSICDZv3gx/f3+cPn0aOp3OYH22bNnQsmVL+Pr6omrVqpoVSkRERBnbO4WK4OBgdO3aFba2tujYsSPGjBmDQoUKwcbGBoqiICIiArdv30ZgYCA8PDzw2WefYdasWbCwYNcNIiKiD12qQ8WDBw8wcuRILFq06I0zE1auXBnt2rXDuHHjcOTIEfj6+mL69OmaFEtEREQZV6pDxebNm7Fq1SpkyZL6xo169eqhVKlSCAgIwBdffJGmAomIiMg8pDohDB06FIqivPMfKFCgANq0afPOjyMiIiLzkurODikFiri4OHh6eiJ//vzIlSsXWrZsiVu3bqXqsURERPTheO9xKmbNmoVcuXJh+fLlsLa2xtWrV+Hj44Mff/xRi/qIiIjITKQ6VHTv3h3Tpk2Dk5OTwfLY2FhMmDBB/b1Zs2Z48OCBdhUSERGRWUh1qJgxYwZGjhyJBg0aoHv37ury6tWro1SpUqhUqRKyZs2Kmzdv4rPPPkuXYomIiCjjSnWfivz582PVqlWwsrJC9+7dERISAgBo0aIFNmzYgCJFisDe3h6enp6YNWtWuhVMREREGdM796no0qULGjdubNBqUb16dVSvXj096iMiIiIzkaahLlNqtSAiIqLM673Gz+7SpQtmzJiBUaNGYc2aNVrVlKzg4GB069YNjo6OyJ49O8qXL49//vknXf8mERERpV6qQ8WdO3fQtm1b5M6dG05OTvDw8EBcXJxRWi2ePXuG2rVrw8rKCr/++isuXbqEWbNmIXfu3Jr/LSIiIkqbVPepGDZsGJo0aYIBAwYgPj4e//zzD/z9/TF8+HAAyfe10Mr06dPh4uKCVatWqcuKFSum2fMTERHR+0t1S0WpUqUwaNAgfP7552jdujXGjh2bZNrzxK0WWgoICEC1atXQoUMH5MuXD5UrV8ayZcs0/RtERET0flLdUhEXF4d69eqhcOHC0Ol0OHfuHGbOnJnstl26dNGsQAC4efMmFi1aBC8vL4waNQqnTp3C4MGDkTVr1hRbRGJiYhATE6P+Hh4ermlNREREZCjVoWLmzJnYunUrDh8+jBw5cmDo0KFGu41Up9OhWrVqmDp1KoBX06tfvHgRixcvTjFU+Pn5GYz0SUREROkr1aHiypUr6NixIzp27PjOfyQoKAglSpR458fpOTk5oWzZsgbLypQpg+3bt6f4GF9fX3h5eam/h4eHw8XFJc01EBER0Zuluk/F0aNHERQU9M5/YM2aNUn6Xryr2rVr4+rVqwbLrl27hiJFiqT4GGtra9jZ2Rn8EBERUfpJdajo3bs35s2bhxkzZuDJkydv3T4wMBCdO3dGvnz5UKpUqfcqcujQoTh+/DimTp2KoKAgbNy4EUuXLoWHh8d7PS8RERFpJ9WXPxRFwdy5c7FgwQKUKlUKLi4uKFu2LAoUKAAbGxvExsYiLCwMd+7cwYULF+Di4oIVK1agXLly711k9erVsXPnTvj6+mLixIkoVqwY/P390bVr1/d+biIiItLGO8/94eHhgW+++QZr1qzB7t27cfjwYTx9+hTZs2dHwYIFUbduXXh7e6NJkyaaFtq6dWu0bt1a0+ckIiIi7bxzqAAAOzs7DBo0CIMGDdK6HiIiIjJT7zX3BxEREZEeQwURERFpgqGCiIiINMFQQURERJpIc6h48eIFXrx4gbi4OACvxqUYMmQIFi5cCBHRrEAiIiIyD2m6+wMAcubMiXbt2mHEiBHImzcv6tati5w5c6JGjRq4detWipONERER0YcpzaGidevW6twb+llJjx07hsKFC8PX11eb6oiIiMhspPnyR5UqVQAA586dw9atWzFixAgULlwYAPDgwQNtqiMiIiKzkeZQERkZCW9vb7Rp0wYlS5bEsGHDAAAbNmzA5s2bNSuQiIiIzEOaL3/MmDEDW7duRcGCBdG1a1dYW1vjp59+wv379zFx4kQtayQiIiIzkOZQYWFhgVatWuHu3bvIly8fnj17hqpVq6Jt27Za1kdERERmIs2XP44fP46PPvoIQ4cOBQDkypULf/75J9zd3fHy5UvNCiQiIiLzkOZQMWTIELRt2xZlypQB8Gpq9E6dOiFPnjwYOHCgZgUSERGReUhzqMiVKxeWLVsGZ2dng+V58uTBzp0737swIiIiMi9pDhXlypVLsiwqKgpLly6Fvb39exVFRERE5ifNHTVr1aqF+fPn48mTJzh58iROnz6N77//Hrdu3cKSJUu0rJGIiIjMQJpDRfv27XHkyBHs2rULa9euRUxMDMqVKwd/f3+0adNGyxqJiIjIDKQ5VABAvXr1cODAAa1qISIiIjOW5j4Vly5dwqVLl9Qhufft2wdXV1f4+PjwllIiIqJMKM2hokKFClixYgWio6Nx/vx5tG7dGrdu3UJcXBy8vLy0rJGIiIjMQJovf3z99deYNWsWAKBFixZwcHDAH3/8AQcHB4wZM0azAomIiMg8pDlUFC9eHABw8OBB/Pbbb1i4cCEcHBwAvLo0QkRERJlLmkNFtmzZ0L59exw4cAC1atVCv379EBERgR9++AG7du3SsEQiIiIyB2kOFd999x2OHz+Obt264fPPP4eiKDh16hRKlCiBjRs3alkjERERmYH3uqW0Zs2aBr87ODigUqVK6mUQIiIiyjzSfPdHx44d4ebmhiNHjiAuLg4NGzZE1apV4eLigr1792pZIxEREZmBNIeKs2fPws/PD/Xq1cPcuXNx+PBhLF68GMHBwdixY4eWNRIREZEZSPPljw4dOqBAgQKIjIzEjBkz8MUXX6BPnz4AXs1gSkRERJlLmlsqQkNDcfHiRfTt2xdhYWGYOXMmAODp06fYsmWLZgUSERGReUhzqBgyZAi8vb3x77//Yv369ShZsiR27tyJDh06IEeOHFrWSERERGYgzZc/SpcunaRDZrt27dCuXbv3LoqIiIjMz3vdUhoeHo65c+fi1KlTsLKyQuPGjeHm5obs2bNrVR8RERGZiTRf/rh69So+/vhjTJo0Cf/++y8ePnyIH374ARUqVMD9+/e1rJGIiIjMQJpDxeDBg9GtWzcEBwfjxo0b+Ouvv3DlyhVs27YNEydO1LJGIiIiMgNpvvyRK1cu9Y6PxCpWrAgrK6v3KoqIiIjMT5pbKgoXLpzs8mfPnuHEiRNpLoiIiIjMU5pbKhwdHTFixAh8+eWXsLe3x6NHj3Do0CEsX74cX331lZY1EhERkRlIc6gYMWIEfH19Ua9ePcTHxwMALCws0LNnT8yYMUOzAomIiMg8pDlUKIqCadOmwcfHB3/99RdEBFWqVEGhQoW0rI+IiIjMRJr7VOg5ODigTZs2qF27Ng4ePIizZ89qURcRERGZmfcOFXqOjo7o1KkTli1bxtYKIiKiTEizUAEAWbNmxbx585CQkKDl0xIREZEZ0DRUAIClpSVKliyp9dMSERFRBpfqUPHs2bNUP2m2bNnSVAwRERGZr1SHip9++inVT6q/xZSIiIgyj1TfUjpp0iRERETAxsbmjduFh4fjzJkz710YERERmZdUh4pbt27B09MzVdsqipLmgoiIiMg8pTpUdO7cGaNHj0aOHDneuF1UVBQmTZr03oURERGReUl1qBg4cCDKlCmTqm0HDx6c5oKIiIjIPKW6o+Znn32W6id9l22JiIjow6D5OBVERESUOTFUEBERkSYYKoiIiEgTDBVERESkCYYKIiIi0gRDBREREWmCoYKIiIg0wVBhAmFhYejcuTPs7e3x0UcfYe3atal63JUrV+Dl5YU5c+bg4MGD6VwlERHRuzHLUDFt2jQoioIhQ4aYupQ0GT9+PLp164b9+/ejcOHCcHNzw+XLl9/4mC1btqB///7w9fXF0KFD0ahRIyNVS0RElDqpHqY7ozh16hSWLFmCChUqmLqUNImIiIC7uztKliwJAFi1ahWKFSuGf//9N8Vh0Pfu3Qtvb2+cOnUKefPmNWa5REREqWZWLRWRkZHo2rUrli1bhty5c5u6nDSxtbVVAwUAODo6ws7ODg0aNEh2+4iICHTv3h0zZsxAgQIFjFQlERHRuzOrUOHh4YFWrVqhSZMmpi5FMxs3bsT69euRJ0+eZNcvWbIEL1++xPPnz/HVV1+hQoUKmDdvnpGrJCIiejuzCRWbN2/GmTNn4Ofnl6rtY2JiEB4ebvCTkdy6dQve3t7w8PDAli1bEBsbm+x2O3fuROHChdG0aVNs27YNvXr1wuDBg7Fp0yYjV0xERPRmZhEq7t27B09PT2zYsAHZsmVL1WP8/Pxgb2+v/ri4uKRzle+mQIEC6Ny5M1xdXbFhwwZMmjQp2e2uXLmChg0bokSJEgBeTStfsGBBzJw505jlEhERvZVZhIrTp0/j8ePHqFKlCrJkyYIsWbLg8OHD+OGHH5AlSxYkJCQkeYyvry/CwsLUn3v37pmg8pRlz54dVatWxbZt21CnTh388ssvyW4XGRmJnDlzqr8rioJGjRrh2rVrxiqViIgoVczi7o/GjRvjwoULBsvc3NxQunRpjBgxApaWlkkeY21tDWtra2OV+F7at2+f4uWMQoUKITQ01GBZ/vz54eDgYIzSiIiIUs0sQoWtrS0++eQTg2U2NjZwdHRMstwcRUdHo27dusmua926Nf744w+DZaGhoWjcuLExSiMiIko1s7j88SF5+PAhZs2ahf/++w8AEBISgoCAAPj6+gIA1q5di3r16iEmJgYAMGLECISEhKjBIioqCocOHcKoUaNMswNEREQpMIuWiuQcOnTI1CWkyX///YcFCxZg0qRJaNSoEQoXLoytW7fC0dERAPDkyRPcvn0b8fHxsLa2hrOzMw4cOIAxY8bg6NGjuHfvHlavXm0w1gUREVFGoIiImLoIYwgPD4e9vT3CwsJgZ2dn6nLIRMKWZay7gN7Gvk/qOxgPWT0k/QrRmH8Pf1OXQETvILXfobz8QURERJpgqCAiMhPvMsNxXFwcfHx8UKBAARQoUACenp548eKFEaulzIihgojITLzLDMeTJ0/G06dP4e/vD1dXV/zwww8YNGiQkSumzMZsO2oSEWUm7zLDsYjA0tISK1asAAB06tQJ8fHxWLNmDRYuXGg2Y/iQ+WFLBRGRGXiXGY7j4uLg4eFhsKxNmzaIj49HREREepdKmRhDBRGRGXrTDMdZs2ZVb1PXi4+PR4kSJVKcEZlICwwVRERmJLUzHL9u//798Pb2TufqKLNjnwoiIjOin+H49u3b2LBhA4oVK5biLMd6wcHBuHz5MubPn2+kKimzYqh4T6FB+0xdQqo5lGhm6hKI6D0lnuG4bt26+OWXX94aKkaOHInVq1cjSxYe8il98fIHEZGZat++PbJmzfrGbWbOnInu3bujWLFiRqqKMjOGCiIiM/WmGY4BYPPmzXB0dESTJk3UZY8fPzZGaZRJMVQQEZmBd53hePfu3Vi/fj2cnZ2xd+9e7NmzB/PmzcPSpUtNtg/04eMFNiIiM/AuMxz/888/aN++PWJiYrB7926D5/nnn39MUT5lEgwVRERmoHz58rh582aK6728vODl5QUAqF27NqKjo41VGpGKlz+IiIhIEwwVREREpAmGCiIiItIEQwURERFpgqGCiIiINMFQQURERJpgqCAiIiJNcJwKIiITeHqoualLSDXHBr+ZugQyE2ypICIiIk0wVBAREZEmGCqIiIhIEwwVREREpAmGCiIiItIEQwURERFpgqGCiIiINMFQQURERJpgqCAiIiJNMFQQERGRJhgqiIiISBMMFaSZhw8fon379rC3t0eJEiWwaNGiN24/YcIE5M+fH/nz54e3tzfi4+ONVCkREaUHhgrSTM+ePVG+fHksXLgQRYsWhbu7O9atW5fstosXL4aTkxP27duHTp06YdasWVixYoWRKyYiIi1xllLSxL///ouePXviq6++AgB8/fXX+OSTT7Bs2TJ88803SbavUaMGqlSpAgDw9/fHzz//jAsXLhi1ZiIi0hZbKkgTDg4OaN++vfp7lixZ0KJFC4SGhia7vT5QAICiKMidOze++OKLdK+TiIjSD1sqSBNOTk5JlsXHx6NmzZpvfez58+fRvHlzNGvWLD1KIyIiI2FLBaWbP/74A15eXimuDwsLw7x589CoUSPs27cP9+7dM2J1RESkNYYKShc7d+5EkyZNULZs2RS3sbGxQYsWLTBgwACcO3cOXbp0MWKFRESkNV7+IM09e/YM69evx6ZNm964XZYsWVCiRAlMnjwZADBlyhSEhYXB3t7eGGUSEZHG2FJBmkpISICPjw9++OEHZM2aNdWP++qrr6AoCrJkYc4lIjJXDBWkKV9fX7i7u6NgwYLqssePH7/1cdHR0ahSpQpsbGzSszwiIkpHPC0kzXz33XfQ6XR49OgR9u7di/j4eBw5cgQNGjTAkydPsHz5cuzfvx9W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",
      "text/plain": [
       "<Figure size 600x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "font_properties = {\n",
    "    'family': 'Times New Roman',  # Choose font\n",
    "    'style': 'normal',  # Choose font style (e.g., 'normal', 'italic', 'oblique')\n",
    "    'weight': 'normal',   # Choose font weight (e.g., 'normal', 'bold', 'light')\n",
    "    'size': 12          # Font size\n",
    "\n",
    "}\n",
    "\n",
    "# Load the DataFrame with the crop area\n",
    "df = pd.read_csv(output_csv)  \n",
    "display(df)\n",
    "unique_scenarios = df['Scenario'].unique()\n",
    "\n",
    "for scenario in unique_scenarios:\n",
    "    if scenario not in all_combinations:\n",
    "        continue\n",
    "    wdf = df[df['Scenario'] == scenario].copy()\n",
    "\n",
    "    # set graph names and paths\n",
    "    graph_name = f\"Crops_{scenario}\"\n",
    "    graph_path = f'{root_dir}/Outputs/Figures/{graph_name}.jpg'\n",
    "\n",
    "    # Calculate Losses\n",
    "    wdf['Losses'] = (wdf['Land Used (Ha)'] / wdf['Total Land (Ha)']) * 100\n",
    "    losses = wdf[['Crop', 'Losses']].set_index('Crop')\n",
    "\n",
    "    # Order list and color mapping\n",
    "    order = ['OATS', 'SOY', 'WHEAT', 'ALFALFA', 'BARLEY', 'CORN', 'RYE', 'OTHER']\n",
    "    color_mapping = {\n",
    "        'OATS': '#eddbb9',\n",
    "        'SOY': '#7dcd58',\n",
    "        'WHEAT': '#f09a1c',\n",
    "        'ALFALFA': '#6f9f6f',\n",
    "        'BARLEY': '#99944c',\n",
    "        'CORN': '#ecbf46',\n",
    "        'RYE': '#abbdb1',\n",
    "        'OTHER': '#9d9e99'\n",
    "    }\n",
    "\n",
    "    # Reorder the losses DataFrame\n",
    "    ordered_area_sums = losses.reindex(order).fillna(0)\n",
    "\n",
    "    # Create a figure and axis for plotting\n",
    "    fig, ax = plt.subplots(figsize=(6, 5))\n",
    "\n",
    "    # Plot the bar graph\n",
    "    bars = ax.bar(ordered_area_sums.index, ordered_area_sums['Losses'], color=[color_mapping.get(crop, '#000000') for crop in ordered_area_sums.index])\n",
    "\n",
    "    plt.xlabel('Crop Type', fontdict=font_properties)\n",
    "    plt.ylabel('Losses (%)', fontdict=font_properties)\n",
    "    plt.xticks(rotation=30, ha='right', fontproperties=font_properties)\n",
    "    plt.ylim(0, 11)  # Adjust y-limit based on max value\n",
    "\n",
    "    # Add labels to each bar\n",
    "    for bar in bars:\n",
    "        height = bar.get_height()\n",
    "        ax.text(bar.get_x() + bar.get_width() / 2, height + ordered_area_sums['Losses'].max() * 0.02, f'{height:.1f}', ha='center', va='bottom', fontproperties=font_properties)\n",
    "\n",
    "    # Save the plot as an image file\n",
    "    plt.savefig(graph_path, dpi=600, format='jpg', bbox_inches='tight')\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create a Panel of Selected Graphs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image, ImageDraw, ImageFont\n",
    "import sys\n",
    "\n",
    "# Setup dictionary to map scenario labels to descriptive titles\n",
    "selected = {\n",
    "   \n",
    "    f'No_Restrictions_SAT': 'SAT Sites: \\nNo Restrictions',\n",
    "   \n",
    "    f'NoMSG1_4_SAT': 'SAT Sites: \\nNo MSG 1-4 Soils',\n",
    "    \n",
    "}\n",
    "\n",
    "base_path = f'{root_dir}/Outputs/Figures'\n",
    "image_paths = [f'{base_path}/Crops_{key}.jpg' for key in selected.keys()]\n",
    "\n",
    "def merge_images(image_paths, text_labels, output_path):\n",
    "    if len(image_paths) not in [2, 4, 6]:\n",
    "        raise ValueError(\"The number of images must be either 2, 4, or 6\")\n",
    "\n",
    "    # Open all images\n",
    "    images = [Image.open(path) for path in image_paths]\n",
    "\n",
    "    # Determine the maximum width and height of the images\n",
    "    max_width = max(image.width for image in images)\n",
    "    max_height = max(image.height for image in images)\n",
    "\n",
    "    # Resize images by adding white padding to smaller images\n",
    "    padded_images = []\n",
    "    for image in images:\n",
    "        new_image = Image.new('RGB', (max_width, max_height), (255, 255, 255))\n",
    "        new_image.paste(image, ((max_width - image.width) // 2, (max_height - image.height) // 2))\n",
    "        padded_images.append(new_image)\n",
    "\n",
    "    # Add text to the images\n",
    "    font = ImageFont.truetype(fr\"{root_dir}\\msc\\Times New Roman.ttf\", 120)\n",
    "    for image, text in zip(padded_images, text_labels):\n",
    "        draw = ImageDraw.Draw(image)\n",
    "        draw.text((350, 140), text, fill=\"black\", font=font)\n",
    "\n",
    "    # Determine the size of the output image\n",
    "    if len(image_paths) == 2:\n",
    "        total_width = max_width\n",
    "        total_height = 2 * max_height\n",
    "    elif len(image_paths) == 4:\n",
    "        total_width = 2 * max_width\n",
    "        total_height = 2 * max_height\n",
    "    else:  # len(image_paths) == 6\n",
    "        total_width = 3 * max_width\n",
    "        total_height = 2 * max_height\n",
    "\n",
    "    # Create a blank canvas\n",
    "    merged_image = Image.new('RGB', (total_width, total_height), (255, 255, 255))\n",
    "\n",
    "    # Paste the images onto the canvas\n",
    "    for i, image in enumerate(padded_images):\n",
    "        if len(image_paths) == 2:\n",
    "            x = 0\n",
    "            y = i * max_height\n",
    "        elif len(image_paths) == 4:\n",
    "            x = (i % 2) * max_width\n",
    "            y = (i // 2) * max_height\n",
    "        else:  # len(image_paths) == 6\n",
    "            x = (i % 3) * max_width\n",
    "            y = (i // 3) * max_height\n",
    "        merged_image.paste(image, (x, y))\n",
    "\n",
    "    # Save the merged image\n",
    "    merged_image.save(output_path)\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    text_labels = list(selected.values())\n",
    "    output_path = f'{root_dir}/Outputs/Figures/SAT_Croplands_Panel.jpg'\n",
    "    merge_images(image_paths, text_labels, output_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
